// axios 的二次封装
import axios from "axios";
// import router from '../router'
import { getToken, removeToken, removeUserId } from "./auth";
import { EventBus } from "@/main";

const http = axios.create({
    // 通用请求的地址前缀
    baseURL: '/api',
    // baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASEURL : '/api',
    // baseURL: process.env.VUE_APP_BASEURL,
    withCredentials: true,
    timeout: 10000, // 超时时间
    headers: { common: {} },
})

// 添加请求拦截器
http.interceptors.request.use(
    function (config) {
        const token = getToken(); // 获取Token
        if (!config.headers) {
            config.headers = {}; // 确保headers存在
        }

        if (token) {
            config.headers.token = token; // 设置Token
        }

        return config;
    },
    function (error) {
        return Promise.reject(error); // 处理请求错误
    }
);

// 添加响应拦截器
http.interceptors.response.use(
    function (response) {
        const data = response.data;

        // 检查是否是 "NOT_LOGIN" 信息
        if (data.code === 0 && data.msg === "NOT_LOGIN") {
            removeToken(); // 清除本地存储的token
            removeUserId(); // 清除其他本地存储信息

            // 发送全局事件，未登录
            EventBus.$emit('notLoggedIn');

            // 返回 Promise.reject()，防止继续执行
            // return Promise.reject("Session expired, please log in again");
            return new Promise(() => { }); // 返回一个无操作的Promise，防止传播错误
        }

        return response; // 正常返回响应
    },
    function (error) {
        // 如果请求失败，确保返回 Promise.reject()
        return Promise.reject(error);
    }
);

export default http;